package 二分搜索法;

public class 实现_二分搜索 {

    public static int erfen(int[] arr,int target){

        //从[0,length-1]这个区间去查找
        int l=0,r=arr.length-1;

        //当l<=r这个条件下进行搜索,为什么不是l<r呢?因为要注意只有一个元素时不就是左右相等吗
        while (l<=r){

            int mid=(l+r)/2;
            int i=arr[mid];

            if(i==target)
                return i;
            if(i>target) {//目标比较大
                //为什么要减1呢?因为我们要参照这是一个闭区间,先前找的是[l,r];[mid]已知不合格,现在就要找[l,mid-1]
                r=mid-1;
            }else{//目标比较小
                l=mid+1;//mid不合格,往右
            }
        }

        return -1;
    }

    public static void main(String[] args) {

        int[] arr=new int[]{1,2,3,4,5,6,7,8,9,10};

        int i=erfen(arr,3);

        System.out.println(i);

    }

}
